package com.pro01.backend.controller;

import com.pro01.backend.pojo.Result;
import com.pro01.backend.pojo.UserInvite;
import com.pro01.backend.service.UserInviteService;
import com.pro01.backend.utils.TokenUtil;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/invites")
public class UserInviteController {

    @Autowired
    private UserInviteService userInviteService;

    // ✅ 登录用户生成邀请码（强制从 token 获取 userId）
    @PostMapping("/generate")
    public Result<String> generateInvite(HttpServletRequest request) {
        Long userId = TokenUtil.getUserId(request);
        String inviteCode = userInviteService.generateInvite(userId);
        return Result.success(inviteCode);
    }

    // 验证邀请码是否有效（不需要登录）
    @GetMapping("/validate/{inviteCode}")
    public Result<Boolean> validateInvite(@PathVariable String inviteCode) {
        boolean isValid = userInviteService.isInviteValid(inviteCode);
        return Result.success(isValid);
    }

    // 使用邀请码（不需要登录）
    @PostMapping("/use/{inviteCode}")
    public Result<Void> useInvite(@PathVariable String inviteCode) {
        boolean success = userInviteService.useInvite(inviteCode);
        return success ? Result.success() : Result.error("邀请码无效或已被使用");
    }

    // ✅ 获取当前登录用户的邀请码列表（强制从 token 获取 userId）
    @GetMapping("/my")
    public Result<List<UserInvite>> getMyInvites(HttpServletRequest request) {
        Long userId = TokenUtil.getUserId(request);
        List<UserInvite> invites = userInviteService.getUserInvites(userId);
        return Result.success(invites);
    }

    // ✅ 仅供开发或管理用途（如开放需加权限校验），目前改为必须登录才能访问
    @GetMapping("/all")
    public Result<List<UserInvite>> getAllInvites(HttpServletRequest request) {
        TokenUtil.getUserId(request); // 校验是否登录
        List<UserInvite> invites = userInviteService.getAllInvites();
        return Result.success(invites);
    }

    @GetMapping("/unused")
    public Result<List<UserInvite>> getMyUnusedInvites(HttpServletRequest request) {
        Long userId = TokenUtil.getUserId(request);
        List<UserInvite> unusedInvites = userInviteService.getUnusedInvites(userId);
        return Result.success(unusedInvites);
    }

}
